﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Sispe.UI
{
    public partial class FrmContrato : Form
    {
        [Dependency]
        public IContratoBL contratoBL { get; set; }
        [Dependency]
        public ITipoTrabajadorBL tipoTrabajadorBL { get; set; }

        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }

        [Dependency]
        public IPersonaBL personalBL { get; set; }

        [Dependency]
        public IHojaDeRecorridoBL hojarecorridobl { get; set; }

        public FrmContrato()
        {
            InitializeComponent();
            this.BuildUp();
        }
        

        bool isContrato;
        
        public void contratVence()
        {
            isContrato = true;
        }

        bool isExtend;

        public void Extend()
        {
            isExtend = true;
        }

        public USUARIO currentUsuarioContrato { get; set; }

        public CONTRATO currentContrato 
        { 
            get { return cONTRATOBindingSource.Current as CONTRATO ;}
            set { cONTRATOBindingSource.DataSource = value ;}
        }

        private void txtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (RBOpTodos.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratos();
                }
                if (RBOpVigentes.Checked)
                {
                    //cONTRATOBindingSource.DataSource = contratoBL.GetFromContratoVigenteByTrabajador(txtDescripcion.Text);
                }
            }
        }

        private void txtDescripcion_KeyPress(object sender, KeyPressEventArgs e)
        {

        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            var contrato = cONTRATOBindingSource.Current as CONTRATO;

            if (contrato != null)
            {
                var rpt = MessageBox.Show(this,
                    string.Format("¿Desea Eliminar el contrato?"),
                    "Mensaje",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question);
                if (rpt == DialogResult.Yes)
                {
                    contratoBL.RemoveContrato(contrato.IdContrato);
                    cargaData();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una estudio.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var contrato = cONTRATOBindingSource.Current as CONTRATO;

            if (contrato != null)
            {
                FrmMttoContrato frm = new FrmMttoContrato();
                frm._contrato = contrato;
                frm.EditarContrato();
                frm.ShowDialog();
                cargaData();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un contrato.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            FrmMttoContrato frm = new FrmMttoContrato();
            frm.NuevoContrato();
            frm.ShowDialog();
            cargaData();
            
 
        }

        private void FrmContrato_Load(object sender, EventArgs e)
        {
            GBProyecto.Visible = false;
            GBTrabajador.Visible = false;
            GBEspecialidad.Visible = false;
            btnBuscar.Visible = false;
            if (currentUsuarioContrato != null)
            {
                menuLlena();

                if (isContrato == true)
                {
                    cargarFecha();
                }
                else
                    cargaData();
            }
            else
            {
                if (isContrato == true)
                {
                    cargarFecha();
                }
                else
                    cargaData();
            }
        }

        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuarioContrato.TRABAJADOR.PERSONA.Dni);

            var permiso = (from p in usuMenuBL.GetAllUsuarioMenu(datoUsuario.IdUsuario)
                           select p.MENU.Tag.ToString()).ToArray();

            System.Windows.Forms.Button[] botones = new System.Windows.Forms.Button[]{
            this.button1,this.button2,this.btnNuevo,this.btnPermiso,this.btnSanciones,this.btnCondiciones};

            var noVisible = from nv in botones
                            where !permiso.Contains(nv.Tag.ToString())
                            select nv;

            noVisible.ToList().ForEach(nv => nv.Enabled = false);

            cargaData();
        }

        public void cargaData()
        {
            //var _contrato = contratoBL.GetAllFromContratos();
            cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratos();
        }

        private void RBOpTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpTodos.Checked)
            {
                cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratos();
            }
            if (RBOpVigentes.Checked)
            {
                cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratosVigentes();
            }
        }

        private void RBOpVigentes_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpTodos.Checked)
            {
                cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratos();
            }
            if (RBOpVigentes.Checked)
            {
                cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratosVigentes();
            }
        }
        public void cargarFecha()
        {
            var a = dtpFecNacIni.Value = dtpFecha.Value.AddDays(14);
            var b = dtpFecNacFin.Value = dtpFecNacIni.Value.AddDays(30);
            cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratoByFecha(Convert.ToInt32(a.Month.ToString()), Convert.ToInt32(b.Month.ToString()));
        }
        private void btnGenerar_Click(object sender, EventArgs e)
        {
            var a = dtpFecNacIni.Value = dtpFecha.Value.AddDays(14);
            var b = dtpFecNacFin.Value = dtpFecNacIni.Value.AddDays(30);
            cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratoByFecha(Convert.ToInt32(a.Month.ToString()), Convert.ToInt32(b.Month.ToString()));
        }

        
        private void button2_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null)
            {
                FrmMttoContrato frmmttocontrato = new FrmMttoContrato();
                frmmttocontrato._contrato = currentContrato;
                frmmttocontrato.EditarContrato();
                frmmttocontrato.ShowDialog();
            }
            else
            {
                MessageBox.Show("Mensaje", "Seleccione un Item", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        
        private void cONTRATORadGridView_DoubleClick(object sender, EventArgs e)
        {
            if (isExtend == true)
            {
                RBOpVigentes.Visible = false;
                currentContrato = cONTRATOBindingSource.Current as CONTRATO;
                Close();
            }
        }

        public void listaTrabajadoresByDescripcion()
        {
            //this.Show();
            cONTRATOBindingSource.DataSource = contratoBL.GetFromContratoByIdTipoTrabajador();
        }

        private void btnSanciones_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null)
            {
                FrmSanciones frm = new FrmSanciones();
                frm.CurrentContrato = currentContrato;
                frm.sancionContrato();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato");
            }
        }

        private void btnPermiso_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null && currentContrato.FechaTermino.Date >= DateTime.Now.Date)
            {
                FrmPermisos frm = new FrmPermisos();
                frm.CurrentContrato = currentContrato;
                frm.permisoContrato();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato o el Contrato ya finalizó", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnCondiciones_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null)
            {
                FrmCondiciones frm = new FrmCondiciones();
                frm.CurrentContrato = currentContrato;
                frm.condicionContrato();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;

            if (currentContrato != null)
            {
                if (currentContrato.FechaTermino >= DateTime.Now)
                {
                    DialogResult rpta = MessageBox.Show(this,
                            "Desea finalizar el Contrato",
                            "Mensaje",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Information);
                    if (rpta == DialogResult.Yes)
                    {
                        FrmMttoFinalizacionContrato frm = new FrmMttoFinalizacionContrato();
                        //frm._currentContrato = currentContrato;
                        frm.IdContrato = currentContrato.IdContrato;
                        frm.NuevoFinContrato();
                        frm.ShowDialog();
                        cargaData();
                        cONTRATOBindingSource.ResetBindings(true);
                    }
                }
                else
                {
                    MessageBox.Show("Contrato ya finalizado.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato");
            }
        }

        private void RBOpTrabajador_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpEspecialidad.Checked)
            {
                GBEspecialidad.Visible = true;
                btnBuscar.Visible = true;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = false;
            }

            if (RBOpTrabajador.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = true;
                btnBuscar.Visible = true;
                button3.Enabled = true;
            }

            if (RBOpProyecto.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = true;
                btnBuscar.Visible = true;
                GBTrabajador.Visible = false;
            }
        }

        private void RBOpProyecto_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpEspecialidad.Checked)
            {
                GBEspecialidad.Visible = true;
                btnBuscar.Visible = true;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = false;
            }

            if (RBOpTrabajador.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = true;
                btnBuscar.Visible = true;
            }

            if (RBOpProyecto.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = true;
                btnBuscar.Visible = true;
                GBTrabajador.Visible = false;
            }
        }

        private void RBOpEspecialidad_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpEspecialidad.Checked)
            {
                GBEspecialidad.Visible = true;
                btnBuscar.Visible = true;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = false;
            }

            if (RBOpTrabajador.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = true;
                btnBuscar.Visible = true;
            }

            if (RBOpProyecto.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = true;
                btnBuscar.Visible = true;
                GBTrabajador.Visible = false;
            }
        }

        private void btnBuscarEspecialidad_Click(object sender, EventArgs e)
        {
            FrmEspecialidad frmespecialidad = new FrmEspecialidad();
            frmespecialidad.Extend();
            frmespecialidad.ShowDialog();

            if (frmespecialidad.currentEspecialidad != null)
            {
                txtIdEspecialidad.Text = Convert.ToString(frmespecialidad.currentEspecialidad.IdEspecialidad);
                txtDescripcionEspecialidad.Text = frmespecialidad.currentEspecialidad.Descripcion;
            }
        }

        private void btnBuscarProyecto_Click(object sender, EventArgs e)
        {
            FrmProyecto frmProyecto = new FrmProyecto();
            frmProyecto.Extend();
            frmProyecto.ShowDialog();

            if (frmProyecto.currentProyecto != null)
            {
                txtIdProyecto.Text = Convert.ToString(frmProyecto.currentProyecto.IdProyecto);
                txtDescripcionProyecto.Text = frmProyecto.currentProyecto.NombreProyecto;
            }
        }


        private void button3_Click(object sender, EventArgs e)
        {
            FrmTrabajador frmtrabajador = new FrmTrabajador();
            frmtrabajador.Extend();
            frmtrabajador.ShowDialog();

            if (frmtrabajador.currentTrabajador != null)
            {
                txtIdTrab.Text = Convert.ToString(frmtrabajador.currentTrabajador.Id);
                txtDescTrab.Text = frmtrabajador.currentTrabajador.PERSONA.NombreCompleto;
                txtDniTrab.Text = frmtrabajador.currentTrabajador.PERSONA.Dni;
            }
        }

        private void GBTrabajador_Enter(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {
            SearchContratos();
        }

        private void SearchContratos()
        {
            if (RBOpTodos.Checked)
            {
                if (RBOpTrabajador.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetFromContratoByTrabajador(txtDniTrab.Text);
                }
                if (RBOpEspecialidad.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratoByEspecialidad(txtDescripcionEspecialidad.Text);
                }
                if (RBOpProyecto.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratoByProyecto(txtDescripcionProyecto.Text);
                }
            }

            if (RBOpVigentes.Checked)
            {
                if (RBOpTrabajador.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetFromContratoVigenteByTrabajador(Convert.ToInt32(txtIdTrab.Text));
                }
                if (RBOpEspecialidad.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratoByEspecialidad(txtDescripcionEspecialidad.Text);
                }
                if (RBOpProyecto.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratoByEspecialidad(txtDescripcionProyecto.Text);
                }
            }
        }

        private void cONTRATORadGridView_Click(object sender, EventArgs e)
        {            
            //#region UndMedida
            //try
            //{
            //    var currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            //    for (int count = 0; count < cONTRATORadGridView.Rows.Count; count++)
            //    {
            //        if (currentContrato != null)
            //        {
            //            TRABAJADOR a = cONTRATORadGridView.Rows[count].Cells[0].Value as TRABAJADOR;
            //            var und = (from c in personalBL.GetAllFromPersona()
            //                       where c.IdPersona.Equals(a.Id)
            //                       select c).SingleOrDefault();
            //            cONTRATORadGridView.Rows[count].Cells[2].Value = und.NombreCompleto.ToString();
            //        }
            //    }
            //}
            //catch (Exception)
            //{
            //    MessageBox.Show("Error");
            //}
            //#endregion
        }

        private void cONTRATORadGridView_CurrentCellChanged(object sender, Telerik.WinControls.UI.CurrentCellChangedEventArgs e)
        {
            //#region UndMedida
            //try
            //{
            //    var currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            //    for (int count = 0; count < cONTRATORadGridView.Rows.Count; count++)
            //    {
            //        if (currentContrato != null)
            //        {
            //            TRABAJADOR a = cONTRATORadGridView.Rows[count].Cells[0].Value as TRABAJADOR;
            //            var und = (from c in personalBL.GetAllFromPersona()
            //                       where c.IdPersona.Equals(a.Id)
            //                       select c).SingleOrDefault();
            //            cONTRATORadGridView.Rows[count].Cells[2].Value = und.NombreCompleto.ToString();
            //        }
            //    }
            //}
            //catch (Exception)
            //{
            //    MessageBox.Show("Error");
            //}
            //#endregion
        
        }

        private void btnVerVacaciones_Click(object sender, EventArgs e)
        {
            var contrato = cONTRATOBindingSource.Current as CONTRATO;

            if (contrato.TIPO_TRABAJADOR.Descripcion != "OBRERO")
            {
                FrmVacaciones frm = new FrmVacaciones();
                frm._currentContrato = contrato;
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("El Tipo de Trabajador " + contrato.TIPO_TRABAJADOR.Descripcion + " no tiene vacaciones.","Mensaje",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
        }

        private void btnLiquidar_Click(object sender, EventArgs e)
        {
            var _current = cONTRATOBindingSource.Current as CONTRATO;

            if (_current != null)
            {
                if (!_current.Liquidado && _current.FechaTermino <= DateTime.Now)
                {
                    var rpt = MessageBox.Show(this, "¿Es un Cese Definitivo?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (rpt == DialogResult.Yes)
                    {
                        if (_current.IdTipoPersonal == 1 || _current.IdTipoPersonal == 2) //Personal Staff - Empleado
                        {
                            FrmInputDialog input = new FrmInputDialog();
                            input.Nuevo();
                            input.IdContrato = _current.IdContrato;
                            input.IdTipoPersonal = _current.IdTipoPersonal;
                            input.SeguirTrabajando = false;
                            input.ShowDialog();
                            //_current = contratoBL.GetFromContratoById(_current.IdContrato);
                            cargaData();
                            cONTRATOBindingSource.ResetBindings(true);
                        }
                    }
                    else
                    {
                        if (_current.IdTipoPersonal == 1 || _current.IdTipoPersonal == 2) //Personal Staff - Empleado
                        {
                            FrmInputDialog input = new FrmInputDialog();
                            input.Nuevo();
                            input.IdContrato = _current.IdContrato;
                            input.IdTipoPersonal = _current.IdTipoPersonal;
                            input.SeguirTrabajando = true;
                            input.ShowDialog();
                            //_current = contratoBL.GetFromContratoById(_current.IdContrato);
                            cargaData();
                            cONTRATOBindingSource.ResetBindings(true);
                        }
                    }   
                }
                else
                {
                    MessageBox.Show("Este contrato ya está Liquidado o debe finalizarlo.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void BtnContratoRapido_Click(object sender, EventArgs e)
        {
            
                CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
                if (currentContrato != null)
                {
                    FrmMttoContrato frmmttocontrato = new FrmMttoContrato();
                    frmmttocontrato._contrato = currentContrato;
                    frmmttocontrato.ContratoRapido();
                    frmmttocontrato.ShowDialog();
                    this.Close();
                    FrmContrato frmcontrato = new FrmContrato();
                    frmcontrato.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Seleccione un item", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            
        }

        private void BtnEliminar_Click_1(object sender, EventArgs e)
        {
                CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
                if (currentContrato != null)
                {
                    if (currentContrato.IdTipoPersonal == 1 | currentContrato.IdTipoPersonal == 2)
                    {
                        var existe = hojarecorridobl.GetFromIdContrato(currentContrato.IdContrato);
                        if (existe != null)
                        {
                            MessageBox.Show("El Contrato no se puede eliminar", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            var rpta = MessageBox.Show("Seguro desea eliminar contrato?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            if (rpta == DialogResult.Yes)
                            {
                                contratoBL.RemoveContrato(currentContrato.IdContrato);
                                cargaData();
                                
                            }
                            
                        }
                    }
                    if (currentContrato.IdTipoPersonal == 3)
                    {
                        var existe = hojarecorridobl.GetHojaObreroFromIdContrato(currentContrato.IdContrato);
                        if (existe != null)
                        {
                            MessageBox.Show("El Contrato no se puede eliminar", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            var rpta = MessageBox.Show("Seguro desea eliminar contrato?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            if (rpta == DialogResult.Yes)
                            {
                                contratoBL.RemoveContrato(currentContrato.IdContrato);
                                cargaData();
                            }
                        }
                    }
                 
                }
                else
                {
                    MessageBox.Show("Mensaje", "Seleccione un Item", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            
        }

        private void txtIdEspecialidad_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtDescripcionEspecialidad_TextChanged(object sender, EventArgs e)
        {
            SearchContratos();
        }

        private void txtDniTrab_TextChanged(object sender, EventArgs e)
        {
            SearchContratos();
        }

        private void txtDescripcionProyecto_TextChanged(object sender, EventArgs e)
        {
            SearchContratos();
        }
    }
}


















